/**
 * 1. Promise 就是一个类，在执行这个类的时候，需要传递一个执行器进去，执行器会立即执行
 * 2. Promise 中有三个状态分别为fulfilled(成功)、rejected(失败)、pending(等待)
 * 3. 状态只能是从pending转换成其它状态，一旦状态确定就不可更改
 * 4. resolve和rejecte函数是用来更改状态的
 *    resolve=>fulfilled
 *    reject=>rejected
 * 5. then方法内部做的事情就判断状态，如果状态是成功，调用成功的回调函数，如果是失败，调用失败的回调函数
 * 6. then成功回调有一个参数，表示成功之后的值，失败回调函数有一个参数，表示失败的原因
 */
// const MyPromise = require('./MyPromise.js')
// const MyPromise = require('./MyPromiseRepeat.js')
const MyPromise = require('./MyPromiseRepeat.js')
let p1=function(){
    return new MyPromise((resolve,reject)=>{
        setTimeout(()=>{
            resolve('p1')
        },2000)
    })
}
let p2=function(){
    return new MyPromise((resolve,reject)=>{
        // resolve('p2')
        reject('失败')
    })
}
MyPromise.all(['a','b',p1(),p2(),'c']).then(res=>console.log(res),reason=>console.log(reason))
// MyPromise.resolve('1').then((value)=>console.log(value))
// MyPromise.resolve(p1()).then((value)=>console.log(value))
p2().catch((reason)=>{
    console.log(reason)
}).finally(()=>{
    console.log('finally')
    return p1()
}).then(value=>console.log(value),reason=>console.log(reason))

